package com.hulk.dryad.admin.controller.ws;

import com.hulk.dryad.common.component.R;
import com.hulk.dryad.manage.framework.websocket.client.core.WsClient;
import com.hulk.dryad.manage.framework.websocket.common.message.WsMessage;
import com.hulk.dryad.manage.framework.websocket.common.principal.WsPrincipal;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;



/**
 * @author kim
 * see  https://cloud.tencent.com/developer/article/1452203
 */
@Api(value = "websocket", tags = "websocket测试")
@Slf4j
@RequiredArgsConstructor
@RestController
public class HelloWsController {

	private final WsClient wsClient;


    /**
     * 接收然后转发至客户端消息
     * @param message 消息体
	 * @param principal 身份信息
     * @return R
     */
    @MessageMapping("/hello/top")
    public R<String> greeting(@Payload String message,  WsPrincipal principal) {
    	// 当需要用数据源进行查询时，需要设置租户上下文
    	log.info("user: [{}]  tenantId: [{}] receiving: [{}]" , principal.getName(), principal.getTenant(),message);
		WsMessage ws = WsMessage.builder()
				// 用户，非必须
				.user("")
				// 租户，非必须
				.tenantId("")
				// 前端的 destination
				.destination("/topic/greetings")
				// 消息内容
				.payload("您收到了新的系统消息")
				.build();
		wsClient.send(ws);
        return R.ok();
    }

    /**
     * 推送消息
     * @return R
     */
    @GetMapping("/hello/addMessage")
    public R<String> addMessage(){
		WsMessage message = WsMessage.builder()
				// 用户，非必须
				.user("")
				// 租户，非必须
				.tenantId("")
				// 前端的 destination
				.destination("/topic/greetings")
				// 消息内容
				.payload("您收到了新的系统消息")
				.build();
		wsClient.send(message);
        return R.ok();
    }

}